Ubuntu 24.04 Cockpit 安全安装与运维手册(脱敏版)
适用对象:Ubuntu 24.04 LTS 服务器。本文中的
<管理网段>、<服务器IP>、<管理员账户>均为占位符;请替换为本环境的实际值,勿在文档、终端记录或截图中写入密码、私钥、真实公网 IP 等敏感信息。
1. 用途、边界与推荐架构
Cockpit 是 Linux 的 Web 管理界面,默认通过 HTTPS 的 TCP 9090 端口提供服务。它可作为 SSH 的备用管理入口:当 sshd 服务停止、但操作系统、网络与 Cockpit 本身仍在运行时,可登录 Cockpit 的终端执行:
sudo systemctl restart ssh
sudo systemctl status ssh
Cockpit 不是带外管理工具。若系统宕机、网络故障、内核卡死或磁盘/引导异常,Cockpit 同样无法访问。生产服务器应同时配置厂商 BMC/IPMI/Redfish、远程 KVM 和远程电源控制,作为最终恢复通道。
推荐架构:
日常管理:SSH(仅密钥)
备用入口:Cockpit(仅管理网段访问 9090)
最终恢复:BMC/IPMI/远程 KVM(独立于操作系统)
2. 安装或升级 Cockpit
Ubuntu 24.04 原始仓库中的 Cockpit 版本较旧。优先使用 noble-backports 的版本。
先查看可用版本:
sudo apt update
apt-cache policy cockpit cockpit-ws cockpit-bridge
若候选版本来自 noble-backports,安装或升级:
sudo apt install -t noble-backports cockpit
若系统提示找不到 noble-backports,说明 APT 软件源被自定义过;先由系统管理员在 Ubuntu 软件源配置中启用 noble-backports,再执行上述命令。
启用 Cockpit 开机启动并立即开始监听:
sudo systemctl enable --now cockpit.socket
验证:
systemctl is-enabled cockpit.socket
systemctl status cockpit.socket --no-pager
预期结果中应包含 enabled 和 active (listening)。
3. 版本与漏洞核验
3.1 CVE-2026-4631
Cockpit 曾披露 CVE-2026-4631:旧版的登录页“连接到(Connect to)”远程登录功能存在未认证远程代码执行风险。攻击者只需能访问 Cockpit 的 9090 端口,不需要合法用户名或密码。
- 上游修复版本:Cockpit
360。 - Ubuntu 24.04 原始仓库中的
314-1低于修复版本,不应继续作为运行版本。 - 截至本文编写时,Ubuntu 24.04 Backports 提供的 Cockpit
362高于修复版本。
检查已安装版本:
cockpit-bridge --version
dpkg-query -W -f='${binary:Package} ${Version}\n' cockpit cockpit-ws cockpit-bridge
cockpit-bridge --version 显示 360 或更高才满足上游修复版本要求。常规更新操作:
sudo apt update
sudo apt install -t noble-backports cockpit
不要仅依赖“9090 不暴露公网”来替代升级。受控内网中的失陷终端、过宽的 VPN 权限或横向移动同样可能访问该端口。
参考资料:
4. 禁用“连接到”远程主机登录
如果 Cockpit 只用于管理本机,应禁用登录页的“连接到”输入框。该设置保留本机 https://<服务器IP>:9090 登录与本机管理功能,不影响 SSH 服务。
编辑配置:
sudo mkdir -p /etc/cockpit
sudoedit /etc/cockpit/cockpit.conf
写入或在既有 [WebService] 段中加入:
[WebService]
LoginTo=false
若文件中已有
[WebService],不要重复创建该段,仅添加LoginTo=false。
应用配置:
sudo systemctl restart cockpit.socket
重新打开 Cockpit 登录页后,“连接到”输入框应消失。
5. 网络与防火墙控制
Cockpit 默认监听 TCP 9090。仅允许指定的管理 VLAN、跳板机或 VPN 网段访问;不要向整个办公网或公网开放。
5.1 修改默认端口(示例:38080)可选操作,非必须
Cockpit 由 systemd 的 cockpit.socket 监听端口。不要直接修改系统自带的 unit 文件;使用 drop-in 配置覆盖默认监听地址。
创建配置目录并编辑 drop-in:
sudo mkdir -p /etc/systemd/system/cockpit.socket.d
sudoedit /etc/systemd/system/cockpit.socket.d/listen.conf
写入以下内容,将默认 9090 改为 38080:
[Socket]
ListenStream=
ListenStream=38080
第一条空的 ListenStream= 是必需的:它用于清除原 unit 中的默认 9090 监听配置,再由第二条指定新端口。
加载并应用配置:
sudo systemctl daemon-reload
sudo systemctl restart cockpit.socket
验证新端口与旧端口:
sudo ss -ltnp 'sport = :38080'
sudo ss -ltnp 'sport = :9090'
第一条应显示 Cockpit 监听;第二条不应有输出。新的访问地址为:
https://<服务器IP>:38080
5.2 按管理网段放行端口
UFW 示例(将占位网段替换为实际受信任管理网段;端口应与实际 Cockpit 监听端口一致):
sudo ufw allow from <管理网段> to any port 9090 proto tcp
sudo ufw status numbered
若已将端口改为 38080,应改用:
sudo ufw allow from <管理网段> to any port 38080 proto tcp
sudo ufw status numbered
确认不再需要旧端口的 UFW 规则后,再根据 sudo ufw status numbered 显示的编号移除旧的 9090 放行规则。
确认端口监听状态:
sudo ss -ltnp 'sport = :9090'
通过浏览器访问默认端口时:
https://<服务器IP>:9090
若已修改端口,则使用新的端口,例如:
https://<服务器IP>:38080
应使用可信 TLS 证书;不要长期忽略浏览器的证书告警。
6. 账户与权限策略
6.1 SSH 保持仅密钥登录
Cockpit 的网页本机登录使用 PAM/系统账户密码,独立于 sshd 的密码认证策略。因此可以同时保持 SSH 仅允许密钥登录:
sudo sshd -T | grep passwordauthentication
预期:
passwordauthentication no
6.2 使用普通 sudo 账户登录 Cockpit
推荐使用命名的普通管理账户(例如 <管理员账户>),不要日常直接使用 root 登录 Cockpit。该账户加入 sudo 组后,可在 Cockpit 中开启“管理权限”,并执行重启系统、重启服务、更新和网络管理等操作。
检查账户的组:
groups <管理员账户>
若输出没有 sudo,由已有管理员执行:
sudo usermod -aG sudo <管理员账户>
随后让该账户退出并重新登录。
6.3 禁止 root 的 Cockpit 登录
Cockpit 新安装默认禁止 root Web 登录。若之前为了测试删除了限制项,建议恢复:
sudoedit /etc/cockpit/disallowed-users
确保文件中有单独一行:
root
root 密码可保留为 BMC/物理控制台等紧急恢复用途,但不应成为日常 Cockpit 登录凭据。使用普通 sudo 账户能保留可追溯的审计身份,并降低密码泄露后的影响范围。
7. 登录与浏览器问题处理
修改 Cockpit 配置或升级后,如果普通浏览器窗口的“登录”按钮持续转圈,而无痕窗口可以正常登录,通常是该站点的旧缓存或 Cookie 未清除,并非 Cockpit 服务故障。
处理方法:
- 关闭该 Cockpit 页面。
- 用
Ctrl + F5强制刷新,或清除<服务器IP>/ 管理域名对应的站点数据(Cookie、缓存)。 - 重新打开
https://<服务器IP>:9090并登录。
若无痕窗口也无法登录,再收集以下信息进行排查:
sudo systemctl status cockpit.socket cockpit.service --no-pager
sudo journalctl -u cockpit.socket -u cockpit.service --since '15 minutes ago' --no-pager
sudo sed -n '1,80p' /etc/cockpit/cockpit.conf
日志可用于故障分析;共享日志前应检查并删除真实用户名、主机名、IP、令牌等敏感信息。
8. 日常检查清单
每次系统维护或至少每月执行:
sudo apt update
sudo apt upgrade
cockpit-bridge --version
systemctl is-enabled cockpit.socket
sudo sshd -T | grep passwordauthentication
确认以下条件持续满足:
- Cockpit 版本为
360或更高,并持续跟进 Ubuntu 安全更新。 /etc/cockpit/cockpit.conf包含LoginTo=false。- 9090 仅允许指定管理网段访问。
- SSH 仍为
passwordauthentication no。 - 日常使用普通 sudo 账户,root 在
/etc/cockpit/disallowed-users中。 - BMC/IPMI/远程 KVM 可独立访问并定期验证。
9. 最小安全配置速查
Cockpit:noble-backports,版本 >= 360
启动:cockpit.socket 已 enabled 且 active (listening)
端口:TCP 9090 或自定义端口(如 38080),仅受信任管理网段
功能:LoginTo=false
登录:普通 sudo 账户
SSH:仅密钥登录,PasswordAuthentication no
兜底:BMC/IPMI/远程 KVM